/*
 【入门】数的操作
  题目描述
    给定一个 N 个数的数组，M 次操作，每次操作为下列操作之一。求最后的数组。
      操作 1：在第 X 个数之后插入一个数 Y。
      操作 2：删除第 X 个数。
  输入
    第一行两个整数 N，M（N，M ≤ 1000），N 表示数组中一开始有 N 个数，M 表示 M 次操作。
    第二行 N 个整数，表示原来的数组。
    接下来 M 行，每行第一个数 OPT，表示操作类型。
      对于操作 1，接下来两个数 X，Y，表示在第 X 个数之后插入一个数 Y，保证 0 ≤ X ≤ 当前数的个数，若 X=0，表示在数组开头插入。
      对于操作 2，接下来一个数 X，表示要删除第 X 个数，保证 1 ≤ X ≤ 当前数的个数
  输出
    输出若干个数，表示最后的数组。
  样例输入
    5 3
    1 2 3 4 5
    1 1 6
    2 1
    2 2
  样例输出
    6 3 4 5
*/

#include <bits/stdc++.h>

using namespace std;

int main() {
    int n;
    int m;

    cin >> n;
    vector <int> a(n);

    cin >> m;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    for (int i = 1; i <= m; i++) {
        int h;
        cin >> h;
        if (h == 1) {
            int x, y;
            cin >> x >> y;
            a.insert(a.begin() + x, y); // 在动态数组 a 的下标 x 的元素的前面插入 y
        } else {
            int x;
            cin >> x;
            a.erase(a.begin() + x - 1); // 删除动态数组 a 的下标为 x - 1 的元素
        }
    }

    for (int i = 0; i < a.size(); i++) {
        cout << a[i] << " ";
    }

    return 0;
}